/*
 * ipcamera.h
 *  Created on: 2013-4-16
 *      Author: root
 */
#ifndef IPCAMERA_H_
#define IPCAMERA_H_
/* 包含头文件
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <netdb.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <fcntl.h>


/* connect_server - 连接到IpCamera
 * @ ip 	-  IPCamera 的IP地址
 * @ port	-  IPCamera 的端口
 * @ return	-  连接成功时返回socket描述符号，错误时返回-1
 * */
int connect_server(const char *ip, unsigned short prot);

/* read_line - 从指定到描述符号中读取一行数据，以\n作为结束标记，含换行
 * @ fd  - 指定到描述符号
 * @ buf - 缓冲，读取到数据存放
 * @ size - 缓冲区的大小
 * @ return - 返回读取到字节数，包含换行
 */
ssize_t	read_line(int fd, void *buf, size_t size);

/* read_header 	- 读取信息头，以空行作为结束
 * @fd 			- 指定描述符号
 * @header		- 数据存放
 * @size		- header的大小
 * @return 		- 总取读字节数
 */
ssize_t read_header (int fd, void *header, size_t size) ;

/* mkrequest	- 构建一个向IpCamera的请求
 * @request 	- 存放请求的buf
 * @len			- buf的大小
 * @get			- 使用GET 获取的内容
 * @host		- 连接的主机 格式: "192.168.1.198:33"
 * */
int mkrequest(char *request, int len, const char *get, const char *host);

/* parse_content_length - 解析数据头，得到真实的有效数据长度
 * @str		- 数据头		Content-Length: 2220
 * @return  - 数据长度
 * */
int parse_content_length(const char *str) ;

/* read_data - 读取有效到数据存储到文件中
 * @fd 		-描述符
 * @ file 	- 文件名
 * @ size	- 数据长度
 * */
int read_data (int fd, const char *file, size_t size);


#endif /* IPCAMERA_H_ */
